k8s概览

1 定位

用于管理容器化负载和服务的、便捷、可扩展的平台。

2 组件

Components of Kubernetes

(1) 控制面板组件

控制面板组件用于指定全局决策。可以运行在任意机器上。通常为了简洁,全部运行在没有服务部署的机器上。

高可用部署详见Building High-Availability Clusters

1) kube-apiserver

用于暴露Kubernetes API。可以运行多个实例以负载均衡。

详见kube-apiserver

2) etcd

用于保存集群数据的持久化、高可用键值存储。

需要确保备份,详见back up

细节详见documentation

3) kube-scheduler

关注新建但没有分配node的Pods,并选择一个分配。

影响因素包括:独立和聚合的资源需求、硬件/软件/规则限制、关系和反关系规范、数据本地化、相互负载影响和最后期限等。

4) kube-controller-manager

用于运行controller进程。

逻辑上,每个控制器是一个独立的进程。但为了简洁,全部编译成一个二进制文件,并且运行在一个进程中。

控制器包括:

  • 节点控制器:关注并反馈节点失效情况。
  • 作业控制器:关注作业对象,并创建Pods以完成任务执行。
  • 端点控制器:填充端点对象,如合并任务和Pods
  • 服务账户和令牌控制器:为新的命名空间创建默认账户和API访问令牌。

5) cloud-controller-manager

内嵌云相关的控制逻辑,用于管理和云服务商API的连接。

只在云环境中运行,在本地不会运行。

和kube-controller-manager蕾丝,将多个独立的控制逻辑编译成一个二进制文件,并运行在一个进程中。

控制逻辑包括:

  • 节点控制器:用于判断节点失联后是否被删除
  • 路径控制器:用于设置底层云设施路径
  • 服务控制器:用于创建、更新和删除云服务商负载均衡器。

(2) 节点组件

在每个节点上运行,用于维护运行的pods和提供运行时环境。

1) kubelet

代理,用于确保容器运行在Pod中。

2) kube-proxy

实现了部分服务概念的网络代理。

管理节点内外部网络通信。

优先使用操作系统包过滤层,否则向前传输。

3) Container runtime

运行容器的软件。如Docker, containerd, CRI-O和所有 Kubernetes CRI (Container Runtime Interface)的实现。

(3) 附件

使用k8s资源实现集群特性。因为是集群级别的特性,这些附件的资源属于kube-system命名空间。

更多附件详见Addons

1) DNS

集群必需,详见cluster DNS,而其他附件可选

2) Web UI(Dashboard)

详见Dashboard

3) Container Resource Monitoring

详见Container Resource Monitoring

4) Cluster-level Logging

详见cluster-level logging

参考资料